package net

//
// import (
//	"context"
//	"github.com/gogf/goframe/v2/encoding/gjson"
//	"github.com/gogf/goframe/v2/net/ghttp"
//	"github.com/gogf/goframe/v2/os/glog"
//	"sync"
// )
//
// func NewWebsocket() *websocket {
//	return &websocket{
//		ctx: context.Background(),
//	}
// }
//
// type websocket struct {
//	ctx context.Context
//	Fd  int64 `json:"fd,omitempty"` // file descriptor BSD Socket
//
//	UserId  int    `json:"user_id,omitempty"`
//	GroupId string `json:"group_id,omitempty"`
//
//	websocket *ghttp.WebSocket
//	mux       *sync.Mutex
//
//	Request                     *ghttp.Request `json:"-"`
//	closed                      bool
//	groupIds                    *gset.StrSet
//	callbackOnReceivedKeepAlive func(echo bool)
// }
//
// func (r *websocket) close() {
//	// r.mux.Lock()
//	// defer r.mux.Unlock()
//
//	if !r.closed {
//		err := r.websocket.Close()
//		if err != nil {
//			glog.Error(context.Background(), err)
//		}
//	}
//	r.closed = true
// }
//
// func (r *websocket) Write(data *JsonObject) {
//	r.writeMessage(messageTypeJson, data)
// }
// func (r *websocket) writeText(data []byte) {
//	r.writeMessage(messageTypeText, data)
// }
//
// func (r *websocket) writeMessage(messageType int, v interface{}) {
//	if v == nil || r.closed {
//		return
//	}
//
//	r.mux.Lock()
//	defer r.mux.Unlock()
//
//	var bytes []byte
//
//	switch messageType {
//	case messageTypeJson:
//		if enableContentFilter {
//			content := helper.SensitiveWords.Filter(gconv.String(v))
//			bytes = gconv.Bytes(content)
//		} else {
//			bytes = gjson.MustEncode(v)
//		}
//	case messageTypeText:
//		bytes = gconv.Bytes(v)
//	}
//
//	if enableCompression {
//		if len(bytes) <= 32 {
//			// 数据量太小的不压缩
//			r.websocket.EnableWriteCompression(false)
//		} else {
//			r.websocket.EnableWriteCompression(true)
//		}
//	}
//
//	/*
//		[easyWebsocket.(*Websocket).writeMessage] library/easyWebsocket/websocket.go:98: write tcp 172.18.222.93:5229->172.18.222.139:57322: write: broken pipe
//
//		https://gosamples.dev/broken-pipe/
//		Typically there is no need to handle it in any special way since it is normal that a connection may be interrupted by either side of the communication. For example, you can ignore the error, log it or reconnect when it occurs.
//	*/
//	_ = r.websocket.WriteMessage(websocket.TextMessage, bytes)
//
//	// if err != nil && !r.closed {
//	//	glog.Error(r.Request.Context(), err)
//	// }
// }
//
// func (r *websocket) onReceivedPingMessage(h func(echo bool)) {
//	r.callbackOnReceivedKeepAlive = h
// }
